/*****************************************************
This program was produced by the
CodeWizardAVR V2.03.9 Standard
Automatic Program Generator
 Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : Alternator avtostart for Filin
Version : 
Date    : 27.11.2010
Author  : MinOrr/2
Company : Roga i kopyta.
Comments: 


Chip type               : ATtiny2313
AVR Core Clock frequency: 4,000000 MHz
Memory model            : Tiny
External RAM size       : 0
Data Stack size         : 32
*****************************************************/

#include <tiny2313.h>
#include <delay.h>

char menu=1;           //       1-,2-  ,3-,4-  ,5- ,6-. 
char ms=0;             // 200 
char start_counter=0;  //   
char flag=0;           //   
char x=0;

void init(void)
{
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port A initialization
// Func2=In Func1=In Func0=In 
// State2=T State1=T State0=T 
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
PORTB=0x00;
DDRB=0xFF;

// Port D initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 62,500 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x03;
TCNT1H=0xCF;
TCNT1L=0x2B;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// Interrupt on any change on pins PCINT0-7: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x80;

// Universal Serial Interface initialization
// Mode: Disabled
// Clock source: Register & Counter=no clk.
// USI Counter Overflow Interrupt: Off
USICR=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;

// Global enable interrupts
#asm("sei")
}


// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{

// Reinitialize Timer 1 value
TCNT1H=0xCF2B >> 8;
TCNT1L=0xCF2B & 0xff;
// Place your code here
 switch (menu)
 {
 case 1:                                                    //     
 PORTB=0x80;                                                //   ,   
 if(!PIND.0) {ms=++ms;if(ms==50){ms=0;menu=2;PORTB.7=0;}}   //              
 break;
 
 case 2:                                                    //     10  
 ms=++ms;                                                   //   
 PORTB=0x24;                                                //  
 if(ms==50){ms=0;PORTB=0x26;menu=3;}                        //  
 break;
 
 case 3:
 ms=++ms;                                                           //  3              
 if(ms==15){PORTB=0x24;ms=0;menu=4;}                                //  ,     ,    
 break;
 
 case 4:
 ms=++ms;                                                                                   //  3     
  if(ms==15){if(PIND.1){PORTB=0x34;ms=0;menu=5;start_counter=0;}                            //   ,     
  else{ms=0;menu=2;start_counter=++start_counter;if(start_counter==3){menu=6;}}}      
 break;
 
 case 5:
  //if(!PIND.1){menu=6;}
  if(PIND.0) {flag=1;ms=++ms;switch(ms){case 10:PORTB=0x10;break;case 20:PORTB=0x00;case 50:menu=1;ms=0;flag=0;}} //       2   ,         6       
  if(flag){x=++x;if(x==150){x=0;flag=0;menu=1;ms=0;}}
 break;
 
 case 6:
 PORTB=0xC0;
 break;
 }

}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

 init();

while (1)
      {
      // Place your code here

      };
}
